pub(super) const REDIS_GET_SCRIPT: &str = r#"
    local ret = redis.call("GET", KEYS[1])
    if ret == ARGV[1] then
        redis.call("DEL", KEYS[1])
    end
    return ret
"#;
// 在 set 失败的时候, 返回值是 bool, 在 set 成功时, 需要用 .ok 来判断
pub(super) const REDIS_STORE_SCRIPT: &str = r#"
    local invalidCode = ARGV[3]
    local ret1 = redis.call("set", KEYS[1], ARGV[1], "px", ARGV[2], "nx")
    if ret1 ~= false and ret1.ok == "OK" then
        return 1
    end
    local val = redis.call("get", KEYS[1])
    if val == ARGV[1] or val == invalidCode then
        return 1
    end
    local ret2 = redis.call("set", KEYS[1], invalidCode, "px", ARGV[4])
    if ret2 ~= false and ret2.ok == "OK" then
        return 1
    end
    return 0
"#;
